gusucode.com > VC++ 信息加密聊天源代码-源码程序 > VC++ 信息加密聊天源代码-源码程序\code\SecChat\PrivateManager.cpp

    // PrivateManager.cpp : implementation file
// download by http://www.NewXing.com

#include "stdafx.h"
#include "secretchat.h"
#include "PrivateManager.h"
#include "SecretChatDlg.h"	//主窗口类头文件

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CPrivateManager dialog


CPrivateManager::CPrivateManager(CWnd* pParent /*=NULL*/)
	: CDialog(CPrivateManager::IDD, pParent)
{
	//{{AFX_DATA_INIT(CPrivateManager)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}


void CPrivateManager::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CPrivateManager)
	DDX_Control(pDX, IDC_USERLIST, m_userList);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CPrivateManager, CDialog)
	//{{AFX_MSG_MAP(CPrivateManager)
	ON_BN_CLICKED(IDC_SELECT, OnSelect)
	ON_BN_CLICKED(IDC_ADD, OnAdd)
	ON_BN_CLICKED(IDC_CREATE, OnCreate)
	ON_BN_CLICKED(IDC_CREATEPUBLICKEY, OnCreatepublickey)
	ON_BN_CLICKED(IDC_EDIT, OnEdit)
	ON_BN_CLICKED(IDC_DELETE, OnDelete)
	ON_LBN_DBLCLK(IDC_USERLIST, OnDblclkUserlist)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CPrivateManager message handlers


void CPrivateManager::OnOK() 
{
	// TODO: Add extra validation here
	
	//CDialog::OnOK();
}

void CPrivateManager::OnCancel() 
{
	// TODO: Add extra cleanup here
	
	//CDialog::OnCancel();
}

BOOL CPrivateManager::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

BOOL CPrivateManager::PreTranslateMessage(MSG* pMsg) 
{
	// TODO: Add your specialized code here and/or call the base class
	
	return CDialog::PreTranslateMessage(pMsg);
}

void CPrivateManager::OnSelect() 
{	
	CSecretChatDlg * pSecretChatDlg = (CSecretChatDlg *)AfxGetMainWnd();
	CString strUser;

	//获得现在选择列表的索引
	if(m_userList.GetCurSel() != -1)
	{
		m_userList.GetText(
			m_userList.GetCurSel(),
			strUser);
		AfxGetApp()->WriteProfileString(
					"SecretKeySetup",
					"UserPrivateKey",
					strUser);
		pSecretChatDlg->m_setupDlg.ShowTabWindow(0);
	}	
	else
	{
		AfxMessageBox("没选择私钥");
	}

	
}

void CPrivateManager::OnAdd() 
{	
	CSecretChatDlg * pSecretChatDlg = (CSecretChatDlg *)AfxGetMainWnd();
	CString str = "私钥文件(*.sk)|*.sk|";
	CFileDialog fileName(
		TRUE,
		0,
		0,
		OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
		str,
		this);
	if ( fileName.DoModal() == 1)
	{				
		CString strNewFileName = pSecretChatDlg->m_appName 
			+ "\\user\\" 
			+ fileName.GetFileName();

		WIN32_FIND_DATA wfd;
		HANDLE hSearch = ::FindFirstFile(
			strNewFileName,
			&wfd);
		if(hSearch != INVALID_HANDLE_VALUE)
		{
			if(MessageBox(
				"私钥文件已经存在。覆盖 " + strNewFileName + " 文件吗?",
				"添加私钥文件",
				MB_YESNO | MB_ICONQUESTION) == IDNO)
			{
				return;
			}
		}

		::CopyFile(
			fileName.GetPathName(),
			strNewFileName,
			FALSE);	

		pSecretChatDlg->m_setupDlg.ShowTabWindow(0);//刷新显示
		pSecretChatDlg->m_setupDlg.ShowTabWindow(1);	//刷新列表
	}

}

void CPrivateManager::OnCreate() 
{	
	CSecretChatDlg * pSecretChatDlg = (CSecretChatDlg *)AfxGetMainWnd();

	CSecretKeyEdit secretKeyEditDlg;
	secretKeyEditDlg.m_select = SELECT_CREATE;
	secretKeyEditDlg.DoModal();

	pSecretChatDlg->m_setupDlg.ShowTabWindow(0);//刷新显示
	pSecretChatDlg->m_setupDlg.ShowTabWindow(1);//刷新显示
	
}

void CPrivateManager::OnCreatepublickey() 
{	
	CSecretChatDlg * pSecretChatDlg = (CSecretChatDlg *)AfxGetMainWnd();
	CSecretKeyEdit secretKeyEditDlg;

	//获得现在选择列表的索引
	if(m_userList.GetCurSel() != -1)
	{
		CString strUser;
		m_userList.GetText(
			m_userList.GetCurSel(),
			strUser);

		if(secretKeyEditDlg.validateSecretKey(
			pSecretChatDlg->m_appName + "\\user\\" + strUser) != 1)
		{
			MessageBox(
				strUser + " 不是私钥文件",
				"密聊",
				MB_ICONEXCLAMATION);
			return;
		}
		if(secretKeyEditDlg.CreatePublicKey(
			pSecretChatDlg->m_appName + "\\user\\" + strUser))
		{
			strUser.SetAt(
				strUser.GetLength() - 2,
				'p');
			MessageBox(
				"已经生成公钥文件 " + strUser,
				"密聊",
				MB_ICONINFORMATION);
		}

	}
}

void CPrivateManager::OnEdit() 
{
	CSecretKeyEdit secretKeyEditDlg;
	CSecretChatDlg * pSecretChatDlg = (CSecretChatDlg *)AfxGetMainWnd();
	//获得现在选择列表的索引
	if(m_userList.GetCurSel() != -1)
	{
		CString strUser;
		m_userList.GetText(
			m_userList.GetCurSel(),
			strUser);

		secretKeyEditDlg.m_select = SECRETKEY_PRIVATE;
		if(secretKeyEditDlg.validateSecretKey(
			pSecretChatDlg->m_appName + "\\user\\" + strUser) != SECRETKEY_PRIVATE)
		{
			MessageBox(
				"不是用户私钥文件",
				"密聊",
				MB_ICONINFORMATION);
			return;
		}
		secretKeyEditDlg.DoModal();

	}	
}

void CPrivateManager::OnDelete() 
{
	CSecretKeyEdit secretKeyEditDlg;
	CSecretChatDlg * pSecretChatDlg = (CSecretChatDlg *)AfxGetMainWnd();
	//获得现在选择列表的索引
	if(m_userList.GetCurSel() != -1)
	{
		CString strUser, strFriend;
		m_userList.GetText(
			m_userList.GetCurSel(),
			strUser);
		strFriend = strUser;
		strFriend.SetAt(
			strFriend.GetLength() - 2,
			'p');

		if(MessageBox(
			"是否删除私钥文件 " + strUser + " 和它的公钥文件 " + strFriend + " 吗?",
			"删除私钥文件",
			MB_YESNO | MB_ICONQUESTION) == IDNO)
		{
			return;
		}
		::DeleteFile(
			pSecretChatDlg->m_appName 
			+ "\\user\\"
			+ strUser);	
		::DeleteFile(
			pSecretChatDlg->m_appName 
			+ "\\user\\"
			+ strFriend);	
	
		pSecretChatDlg->m_setupDlg.ShowTabWindow(0);//刷新显示
		pSecretChatDlg->m_setupDlg.ShowTabWindow(1);	//刷新列表
	}	
}

void CPrivateManager::OnDblclkUserlist() //双击列表
{
	OnEdit();	
}